package com.erp.acaccount.dao.idl;

import java.util.Map;
import java.util.Set;
import java.util.Vector;

import com.erp.acaccount.ao.idl.ACAccountPo.BankAccountPo;
import com.erp.acaccount.dao.idl.ACAccountDdo.ACItemsDdo;
import com.erp.acaccount.dao.idl.ACAccountDdo.ACItemsFilterDdo;
import com.erp.acaccount.dao.idl.ACAccountDdo.BankAccountDdo;
import com.erp.acaccount.dao.idl.ACAccountDdo.BankAccountFilterDdo;
import com.paipai.lang.uint32_t;
import com.paipai.lang.uint64_t;
import com.paipai.util.annotation.ApiProtocol;
import com.paipai.util.annotation.Field;
import com.paipai.util.annotation.HeadApiProtocol;

/**
 * 云分销(经营类会计类信息服务)DAO
 * 
 * @author WilliamXu
 * @version 1.0, 2013-10-14
 */

@HeadApiProtocol(cPlusNamespace = "erp::acaccount::dao", needInit = true, needReset = true, serviceType = "dao", platformType = "erp")
public class ACAccountDao {

	/**
	 * 
	 * 通过SysNos获取银行账户信息
	 * 
	 * @author WilliamXu
	 * @version 1.0, 2013-10-15
	 */
	@ApiProtocol(cmdid = "0xc0611801L", desc = " 通过SysNos获取银行账户信息 ")
	class GetBankAccountByIds {
		class Req {
			@Field(desc = "机器码，必填 ")
			String machineKey;

			@Field(desc = "调用来源，必填 ")
			String source;

			@Field(desc = "场景id，必填 ")
			uint32_t sceneId;

			@Field(desc = "银行账户SysNo数组，必填 ")
			Set<uint64_t> sysNoList;

			@Field(desc = "请求保留字 ")
			String inReserve;
		}

		class Resp {
			@Field(desc = "错误信息 ")
			String errmsg;

			@Field(desc = "银行账户信息列表 ")
			Map<uint64_t, BankAccountDdo> bankAccount;

			@Field(desc = "返回保留字  ")
			String outReserve;
		}
	};

	/**
	 * 
	 * 获取银行账户信息
	 * 
	 * @author WilliamXu
	 * @version 1.0, 2013-10-15
	 */
	@ApiProtocol(cmdid = "0xc0611802L", desc = " Filter过滤获取银行账户信息 ")
	class GetBankAccountByFilter {
		class Req {
			@Field(desc = "机器码，必填 ")
			String machineKey;

			@Field(desc = "调用来源，必填 ")
			String source;

			@Field(desc = "场景id，必填 ")
			uint32_t sceneId;

			@Field(desc = "过滤器，必填 ")
			BankAccountFilterDdo bankAccountFilter;

			@Field(desc = "请求保留字 ")
			String inReserve;
		}

		class Resp {
			@Field(desc = "错误信息 ")
			String errmsg;

			@Field(desc = "银行账户信息 列表")
			Vector<BankAccountDdo> bankAccount;

			@Field(desc = "返回保留字  ")
			String outReserve;
		}
	};

	/**
	 * 
	 * 写入&更新银行账户信息
	 * 
	 * @author WilliamXu
	 * @version 1.0, 2013-10-15
	 */
	@ApiProtocol(cmdid = "0xc0611803L", desc = " 写入&更新银行账户信息 ")
	class AddAndUpdateBankAccount {
		class Req {
			@Field(desc = "机器码，必填 ")
			String machineKey;

			@Field(desc = "调用来源，必填 ")
			String source;

			@Field(desc = "场景id，必填 ")
			uint32_t sceneId;

			@Field(desc = "银行账户信息ddo，必填 ")
			BankAccountDdo bankAccount;

			@Field(desc = "请求保留字 ")
			String inReserve;
		}

		class Resp {
			@Field(desc = "错误信息 ")
			String errmsg;

			@Field(desc = "银行账户SysNo")
			uint64_t bankAccountSysNo;

			@Field(desc = "返回保留字  ")
			String outReserve;
		}
	};

	/**
	 * 
	 * 逻辑删除银行账户信息
	 * 
	 * @author WilliamXu
	 * @version 1.0, 2013-10-15
	 */
	@ApiProtocol(cmdid = "0xc0611804L", desc = " 逻辑删除银行账户信息 ")
	class DeleteBankAccount {
		class Req {
			@Field(desc = "机器码，必填 ")
			String machineKey;

			@Field(desc = "调用来源，必填 ")
			String source;

			@Field(desc = "场景id，必填 ")
			uint32_t sceneId;

			@Field(desc = "银行账户SysNo")
			uint64_t bankAccountSysNo;

			@Field(desc = "请求保留字 ")
			String inReserve;
		}

		class Resp {
			@Field(desc = "错误信息 ")
			String errmsg;

			@Field(desc = "返回保留字  ")
			String outReserve;
		}
	};

	/**
	 * 
	 * 写入&更新经营类会计项目信息
	 * 
	 * @author WilliamXu
	 * @version 1.0, 2013-10-30
	 */
	@ApiProtocol(cmdid = "0xc0611805L", desc = " 写入&更新经营类会计项目信息 ")
	class AddAndUpdateACItems {
		class Req {
			@Field(desc = "机器码，必填 ")
			String machineKey;

			@Field(desc = "调用来源，必填 ")
			String source;

			@Field(desc = "场景id，必填 ")
			uint32_t sceneId;

			@Field(desc = "经营类会计项目信息ddo，必填 ")
			ACItemsDdo aCItemsDdo;

			@Field(desc = "请求保留字 ")
			String inReserve;
		}

		class Resp {
			@Field(desc = "错误信息 ")
			String errmsg;

			@Field(desc = "银行账户SysNo")
			uint64_t aCItemsSysNo;

			@Field(desc = "返回保留字  ")
			String outReserve;
		}
	};

	/**
	 * 
	 * 逻辑删除经营类会计项目信息
	 * 
	 * @author WilliamXu
	 * @version 1.0, 2013-10-30
	 */
	@ApiProtocol(cmdid = "0xc0611806L", desc = " 逻辑删除经营类会计项目信息 ")
	class DeleteACItems {
		class Req {
			@Field(desc = "机器码，必填 ")
			String machineKey;

			@Field(desc = "调用来源，必填 ")
			String source;

			@Field(desc = "场景id，必填 ")
			uint32_t sceneId;

			@Field(desc = "会计项目信息SysNo")
			uint64_t ACItemsSysNo;

			@Field(desc = "请求保留字 ")
			String inReserve;
		}

		class Resp {
			@Field(desc = "错误信息 ")
			String errmsg;

			@Field(desc = "返回保留字  ")
			String outReserve;
		}
	};
	
	/**
	 * 
	 * 通过SysNos获取经营类会计项目信息
	 * 
	 * @author WilliamXu
	 * @version 1.0, 2013-10-30
	 */
	@ApiProtocol(cmdid = "0xc0611807L", desc = " 通过SysNos获取经营类会计项目信息")
	class GetACItemsByIds {
		class Req {
			@Field(desc = "机器码，必填 ")
			String machineKey;

			@Field(desc = "调用来源，必填 ")
			String source;

			@Field(desc = "场景id，必填 ")
			uint32_t sceneId;

			@Field(desc = "银行账户SysNo数组，必填 ")
			Set<uint64_t> sysNoList;

			@Field(desc = "请求保留字 ")
			String inReserve;
		}

		class Resp {
			@Field(desc = "错误信息 ")
			String errmsg;

			@Field(desc = "经营类会计项目信息列表 ")
			Map<uint64_t, ACItemsDdo> aACItems;

			@Field(desc = "返回保留字  ")
			String outReserve;
		}
	};

	/**
	 * 
	 * 获取经营类会计项目信息
	 * 
	 * @author WilliamXu
	 * @version 1.0, 2013-10-30
	 */
	@ApiProtocol(cmdid = "0xc0611808L", desc = " Filter过滤获取经营类会计项目信息")
	class GetACItemsByFilter {
		class Req {
			@Field(desc = "机器码，必填 ")
			String machineKey;

			@Field(desc = "调用来源，必填 ")
			String source;

			@Field(desc = "场景id，必填 ")
			uint32_t sceneId;

			@Field(desc = "过滤器，必填 ")
			ACItemsFilterDdo bankAccountFilter;

			@Field(desc = "请求保留字 ")
			String inReserve;
		}

		class Resp {
			@Field(desc = "错误信息 ")
			String errmsg;

			@Field(desc = "经营类会计项目信息 列表")
			Vector<ACItemsDdo> aCItems;

			@Field(desc = "返回保留字  ")
			String outReserve;
		}
	};

}
